#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

//单个节点的声明与定义
typedef int SLTDataType;
typedef struct SlistNode
{
	SLTDataType data;
	struct SlistNode* next;
}SLTNode;

//创建新节点函数的声明
SLTNode* BuySListNode(SLTDataType x);

//头插的声明
void SLTPushFront(SLTNode** pphead, SLTDataType x);

//尾插的声明
void SLTPushBack(SLTNode** pphead, SLTDataType x);

//头删的声明
void SLTPopFront(SLTNode** pphead);

//尾删的声明
void SLTPopBack(SLTNode** pphead);

//查找是否存在某节点的值为x
//的函数的声明
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);

//在pos节点之前插入一个值为x的节点
//的函数的声明
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);

//在pos节点之后插入一个值为x的节点
//的函数的声明
void SLTInsertAfter(SLTNode* pos, SLTDataType x);

// 删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos);

// 删除pos的后一个位置
void SLTEraseAfter(SLTNode* pos);

//打印单链表
void SLTPrint(SLTNode* phead);